package com.javasm.maimaibao.web.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.javasm.maimaibao.web.dao.AdminMenuDao;
import com.javasm.maimaibao.web.entity.AdminMenu;
import com.javasm.maimaibao.web.service.AdminMenuService;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

/**
 * (AdminMenu)表服务实现类
 *
 * @author makejava
 * @since 2025-02-11 16:04:09
 */
@Service("adminMenuService")
public class AdminMenuServiceImpl extends ServiceImpl<AdminMenuDao, AdminMenu> implements AdminMenuService {


    @Override
    public List<AdminMenu> menuSelect() {
        // 获取所有菜单项
        List<AdminMenu> allMenus = this.list();

        // 把数据组合成树形结构
        List<AdminMenu> result = allMenus.stream()
                // 查找第一级菜单（假设顶级菜单的pid为0）
                .filter(menu -> menu.getPid() == 0)
                // 查找子菜单并放到第一级菜单中
                .map(menu -> {
                    menu.setMenuList(getChildren(menu, allMenus));
                    return menu;
                })
                // 把处理结果收集成一个 List 集合
                .collect(Collectors.toList());
        return result;
    }

    /**
     * 递归获取子菜单
     * @param root 当前菜单
     * @param all 总的数据
     * @return 子菜单
     */
    private List<AdminMenu> getChildren(AdminMenu root, List<AdminMenu> all) {
        List<AdminMenu> children = all.stream()
                // 根据父菜单ID查找当前菜单的子菜单
                .filter(menu -> menu.getPid()==root.getMid())
                // 递归查找子菜单的子菜单
                .map((menu) -> {
                    menu.setMenuList(getChildren(menu, all));
                    return menu;
                })
                // 根据排序字段排序（假设有一个sort字段用于排序）
                // 把处理结果收集成一个 List 集合
                .collect(Collectors.toList());
        return children;
    }
}


